//引入用户集合的构造函数
const {User,validateUser}=require('../../model/user');
//引用下载好的bcrypt对密码进行加密
const bcrypt=require('bcrypt');
module.exports=async(req,res,next)=>{
    //实施验证
    try {
       await validateUser(req.body);
    } catch (ex) {
        //验证没有通过
        //ex.message是错误信息
        //重定向到用户添加页面
        //下面用到了模板字符串符号``
        //return res.redirect(`/admin/user-edit?message=${ex.message}`)
        // next方法只能传递一个参数并只能接收字符串类型
        //next方法存入数据后就可以在app.js里面调用
        //通过JSON.stringify()将对象数据类型转换为字符串类型
        return next(JSON.stringify({path:'/admin/user-edit',message:ex.message}));
    }
    //把数据写入mongdb数据库
    //根据邮箱地址查询用户是否存在
     let user= await User.findOne({email:req.body.email});
     //如果用户已经存在  邮箱地址已经被被人占用
     if(user){
         //重定向回到用户添加页面
         //return res.redirect(`/admin/user-edit?message=邮箱已经被占用`);
         return next(JSON.stringify({path:'/admin/user-edit',message:'邮箱地址已经被占用'}));
     }
         //对密码进行加密处理
         //生成随机字符串
        const Salt=await bcrypt.genSalt(10);
        //第一个是客户端输入的密码第二个是生成的随机字符串
        const password=await bcrypt.hash(req.body.password,Salt);
        //替换里面的密码
        req.body.password=password;
        //将数据添加到数据库当中
        await User.create(req.body);
        //重定向到用户列表页面
        res.redirect('/admin/user');
}